﻿#define _CRT_SECURE_NO_WARNINGS  1
#include<stdio.h>

//int main()
//{
//
//
//	return 0;
//}

//第一种方法行不通
///**
// * Definition for singly-linked list.
// * struct ListNode {
// *     int val;
// *     struct ListNode *next;
// * };
// */
//struct ListNode* reverseList(struct ListNode* head) {
//
//    if (head)
//    {
//        struct ListNode* n1 = NULL, * n2 = head, * n3 = head->next;
//        while (n2)
//        {
//            n2->next = n1;
//            n1 = n2;
//            n2 = n3;
//            if (n3)
//                n3 = n3->next;
//
//        }
//
//        return n1;
//    }
//    return head;
///**
//* Definition for singly - linked list.
//* struct ListNode {
//    *int val;
//    *struct ListNode* next;
//    *
//};
//*/
//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//    if (!head)
//    {
//        return NULL;
//    }
//    else
//    {
//        struct ListNode* new_head = head;
//        if (head->val == val)
//            new_head = removeElements(head->next, val);
//        else
//            new_head->next = removeElements(head->next, val);
//
//        return new_head;
//    }
//}
//}​
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
// * };
// */
//struct ListNode* removeElements(struct ListNode* head, int val)
//{
//    typedef struct ListNode LN;
//    LN* new_head = (LN*)malloc(sizeof(LN));
//    new_head->next = NULL;
//    LN* pcur2 = new_head;
//
//    LN* pcur1 = head;
//    if (!head)
//    {
//        return NULL;
//    }
//
//
//    while (pcur1 && pcur1->next)
//    {
//        if (pcur1->val != val)
//        {
//            pcur2->next = pcur1;
//            pcur2 = pcur2->next;
//        }
//
//        pcur1 = pcur1->next;
//    }
//
//    pcur2->next = pcur1->val == val ? NULL : pcur1;
//    return new_head->next;
//}

​